home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / boosters.arc / LEFT.ASM < prev    next >
Assembly Source File  |  1980-01-01  |  1KB  |  51 lines

  1. ;**********************************************************************
  2. ;       type
  3. ;           AnyString = string[255];
  4. ;
  5. ;       Function LEFT(S : AnyString; N : integer; C : Char); AnyString;
  6. ;                                          external 'B:LEFT';
  7. ;**********************************************************************
  8. LEFT    proc    near
  9.         push    bp
  10.     mov    bp,sp
  11.     push    ds
  12.     lea    si,[bp+9]    ; first character of string to center
  13.     lea    bx,[bp+264]    ; length byte of centered string
  14.     mov    ax,[bp+6]    ; get N
  15.     mov    ss:[bx],al    ; set length of centered string
  16.     inc    bx        ; point to 1st byte of result
  17.     mov    cl,[bp+8]    ; length of string to center
  18.     xor    ch,ch
  19.     sub    ax,cx
  20.     ja    lef1
  21.     xor    ax,ax
  22.     jmp    lef2
  23. ;
  24. lef1:    mov    di,bx
  25.     add    di,cx        ; point to 1st byte of pad
  26.     mov    cx,ax        ; get length of pad
  27.     mov    ax,[bp+4]    ; get fill-byte
  28.     push    ss
  29.     pop    es
  30.     cld
  31. rep    stosb            ; pad result on right
  32. ;
  33. lef2:    mov    di,bx
  34.     push    ss
  35.     pop    ds
  36.     mov    cl,[bp+8]    ; length of string to left-justify
  37.     xor    ch,ch
  38.     cld
  39. rep    movsb
  40. ;
  41.     pop    ds
  42.         mov     sp,bp
  43.         pop     bp
  44.     pop    bx        ; pop IP value into bx . . .
  45.     mov    ax,cs:[bx]    ; . . . to peek at call compiler
  46.     cmp    ax,0FFB1h    ; has set up.  If its CALL 121E
  47.     jnz    lef3        ; we want to skip it,
  48.     add    bx,5        ; because it messes with SP.
  49. lef3:    push    bx        ; put IP back where we found it
  50.         ret     260             ; leave result on stack
  51. LEFT    endp